'use strict';
const moment = require('moment');

module.exports = app => {
    const {
        STRING,
        INTEGER,
        TEXT,
        DATE,
        DECIMAL,
        // FLOAT
    } = app.Sequelize;
    const User = app.model.define('user', { //'user'是别名
        id: {
            primaryKey: true,
            type: INTEGER,
            autoIncrement: true
        },      
        userPwd: {
            type: STRING(50),
            allowNull: false
        }, //用户密码
        userPhone: { //用户手机号 
            type: STRING(11),
            allowNull: false,
        },
        referralCode: { //他的推荐人推荐码
            type: STRING(14),
            allowNull: false
        }, //上一级推荐码
        whoseProxy:STRING(10),//是代理时加此, 被推荐人会继承,根据此统计代理人下的人数
        userCode: { //自己的推荐码 注册后生成
            type: STRING(30), //原来是id+"-"+code
            allowNull: false
        },
        sex: STRING(4), //用户性别
        age: INTEGER(2), //用户年龄        
        userStatus: STRING(2), //用户启用/禁用状态 1 2         
        firstPay: INTEGER(2), //用户收款优先级 1 支付宝 2 微信  3银行卡
        bankCard: STRING(20), //银行卡号
        bankName: STRING(20), //开户行
        bankPayee: STRING(20), //支付银行收款人
        wechart: TEXT(), //微信二维码
        wxPayee: STRING(50), //微信收款名
        aliPayee: STRING(50), //阿里收款名 
        alipay: TEXT(), //支付宝二维码
        deposit: {
            type: DECIMAL(5, 2),
            defaultValue: 0.00,//要默认为 0 不能为null,
        }, //收益产生余额
        buyCount: {
            type: INTEGER(2),
            defaultValue: 0,
        }, //已购买数 
        orderPay:   {
            type: INTEGER(4),//最大5980
            defaultValue: 0,
        },  //购买金额
        integral: INTEGER(200), //积分
        uuid:STRING(20),//注册时的UUID
        signIn: DATE(), //签到
        isVip: INTEGER(2), //是不是会员/已购买
        tempVip: INTEGER(2), //临时VIP 暂保留
        email: STRING(50),
        userName: { //用户名  
            type: INTEGER(50),
        },
        isAdmin: INTEGER(2), //用于手动改的状态, 1  表示此用户是内部的手动
        machineList: STRING(2000), //机器的各ID和状态   存储格式: [{id:85110,status:1},{id:86112,status:2},{id:86113,status:2}]  1:是试用状态的 2是待买的, 3 是已购买
        recommendedAmount:{
            type: INTEGER(4),
            defaultValue:0,//要默认为 0  ,
        }, //, //推荐了多少人
        // onlyOne: {//  实际是手机号码,只是作手机号码唯一保证
        //     type: INTEGER(11),
        //     allowNull: false,
        //     unique: true,//唯一键 插入相同的手机号会报错 在此可不用 ,后期注册多时可用
        //  }, 
        createdAt: {////注册时间  自定义时间格式  
            type: DATE(),
            get() {
                return moment(this.getDataValue('createdAt')).format('YYYY-MM-DD HH:mm:ss');
            }
          },
          updatedAt: {
              type: DATE(),
              get() {
                  return moment(this.getDataValue('updatedAt')).format('YYYY-MM-DD HH:mm:ss');
              }
          }
    }, {
        freezeTableName: true, //不要改此  Model 对应的表名将与model名相同
        timestamps: true, //自动添加createdAt、updatedAt两个字段，分别表示创建和更新时间,且时间是实际时间,表里显示的是2019-02-13 23:50:20
        tableName: 'user',
        paranoid: true, //假删除
        underscored: false, ////不要改此   false: 字段以下划线（_）来分割（默认是驼峰命名风格）
        charset: 'utf8',
        collate: 'utf8_general_ci',
    });
    User.prototype.associate = () => {
        app.model.User.hasOne(app.model.UserInfo, {
            as: 'UserInfo',
            // foreignKey: 'userId' 
        });
        app.model.User.hasOne(app.model.ApplicationWithdrawal, {
            as: 'ApplicationWithdrawal',
        });
        app.model.User.hasOne(app.model.Token, {
            as: 'Token',
        });
        app.model.User.hasOne(app.model.WithdrawHistory, {
            as: 'WithdrawHistory',
        });
        app.model.User.hasOne(app.model.OrderBuy, {
            as: 'OrderBuy',
        });

    };
    // 建立关联关系时，如果外键关联的是主键则不用写targetKey,否则需要。

    User.sync({force: false})
    .then(() => {
		// console.log("自动创建admin表和初始化表内容 " );
        User.findById(1).then(res => {
            // console.log(res,'-------------------444-----')
            if(!res ) {
                User.create({
                    userPwd:'11', 
                    userPhone:'138',
                    referralCode:'0',
                    userCode:'66668888',
                    recommendedAmount:0
                })
            }
        })
    })
    .catch(e => {
        console.log('创建admin表失败!')
    })
    return User;
};